package solicitudes.dao.impl;

import java.util.List;
import java.util.ArrayList;

import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import solicitudes.dao.DAOSolicitud;
import solicitudes.entity.Solicitud;

/***
 * 
 * @author MARIA ALEJANDRA CELEMIN R.
 * @version 1.0
 * 
 * Clase que implementa los metodos de la interfaz DAOSolicitud
 * @see DAOSolicitud
 *
 */
public class DAOSolicitudImpl extends HibernateDaoSupport implements DAOSolicitud {

 private static Logger logger = Logger.getLogger(DAOSolicitudImpl.class);
 
 /* (non-Javadoc)
  * @see solicitudes.dao.DAOSolicitud#obtenerSolicitudes()
  */
 @SuppressWarnings("unchecked")
 @Override
 public List<Solicitud> obtenerSolicitudes() {
  
  Session session = getSession();
  List<Solicitud> solicitudes = new ArrayList<Solicitud>();
  
  try {
   solicitudes = session.createQuery("from Solicitud").list();
  } catch (HibernateException ex) {
   logger.debug("Exception encontrada" + ex.getLocalizedMessage());
  } finally {
   session.close();
  }
  
  return solicitudes;
 }

 /* (non-Javadoc)
  * @see solicitudes.dao.DAOSolicitud#obtenerSolicitud()
  */
 @Override
 public Solicitud obtenerSolicitud(Integer codSolicitud) {
 
  Session session = getSession();
  Solicitud solicitud = null;
  
  try {
   solicitud = (Solicitud) session.get(Solicitud.class, codSolicitud);
  } catch (HibernateException ex) {
   logger.debug("Exception encontrada" + ex.getLocalizedMessage());
  } finally {
   session.close();
  }
  
  return solicitud;
 }

 /* (non-Javadoc)
  * @see solicitudes.dao.DAOSolicitud#guardarSolicitud(solicitudes.entity.Solicitud)
  */
 @Override
 public void guardarSolicitud(Solicitud solicitud) {
  
  Session session = getSession(); 
  session.beginTransaction();
  
  try {
   session.save(solicitud);
   session.getTransaction().commit();
   
  } catch (HibernateException ex) {
   logger.debug("Exception encontrada" + ex.getLocalizedMessage());
  } finally {
   session.close();
  }  
 }

 /* (non-Javadoc)
  * @see solicitudes.dao.DAOSolicitud#eliminarSolicitud(solicitudes.entity.Solicitud)
  */
 @Override
 public void eliminarSolicitud(Solicitud solicitud) {
  
  Session session = getSession();
  session.beginTransaction();
  
  try {
   session.delete(solicitud);
   session.getTransaction().commit();
  } catch (HibernateException ex) {
   logger.debug("Exception encontrada" + ex.getLocalizedMessage());
  } finally {
   session.close();
  }
  
 }

 /* (non-Javadoc)
  * @see solicitudes.dao.DAOSolicitud#editarSolicitud(solicitudes.entity.Solicitud)
  */
 @Override
 public void editarSolicitud(Solicitud solicitud) {
  
  Session session = getSession(); 
  session.beginTransaction();
  
  try {
   session.merge(solicitud);
   session.getTransaction().commit();
  } catch (HibernateException ex) {
   logger.debug("Exception encontrada" + ex.getLocalizedMessage());
  } finally {
   session.close();
  }
  
 }

}
